// 导入axios模块
import axios from 'axios'
// 导入store实例
import store from '@/store'
// 导入router实例
import router from '@/router'
// 导入message函数
import { Message } from 'element-ui'

// 创建axios实例
const service = axios.create({
  // 获取环境变量的基地址
  baseURL: process.env.VUE_APP_BASE_API,
  // 请求超时
  timeout: 5000
})

// 添加请求拦截器
service.interceptors.request.use((config) => {
  const { token } = store.state.user
  if (token) {
    // 有token，通过请求头携带给后台，给headers添加Authorrization属性
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, (error) => {
  return Promise.reject(error)
})

// 添加响应拦截器
service.interceptors.response.use(resp => {
  // 解构剥离数据
  const { data } = resp
  if (data.success) { // 请求成功
    // 直接返回data数据，把data数据给接口调用的地方
    return data
  }
  // 请求失败返回一个失败态的promise实例
  return Promise.reject(data)
},
async(error) => {
  if (error.response.status === 401 && error.response.data.code === 10002) {
    // 给出token过期提示
    Message.error('登录过期，请重新登录')
    // 清空vuex中的token和用户信息
    await store.dispatch('user/logoutAction')
    // 跳转到登录
    router.replace(`/login?redirectUrl=${router.currentRoute.fullPath}`)
  }
  return Promise.reject(error)
})
// 导出axios实例
export default service
